#ifndef INTERPRETER_H__
#define INTERPRETER_H__

//include header
#include "Node.h"
#include <vector>

//using namespace
using namespace std;


namespace npInterpreter
{
    //class forward declaration

    class Interpreter // class inheritance
    {
        //friend
        
        //embedded type
        
        public: Interpreter();
        public: virtual ~Interpreter();
        public: Interpreter(const Interpreter& cpy);
        public: Interpreter& operator=(const Interpreter& asn);
        public: Interpreter(Interpreter&& mov) noexcept;
        public: Interpreter& operator=(Interpreter&& mva) noexcept;
        public: virtual Interpreter* clone() const;

        //other constructors

        //public methods
        public: void handler(const string& instructions) throw();
        public: string output() throw();

        //protected methods

        //private methods
        private: vector<string>& split(vector<string>& results, const string& content, const string& separator, bool removeEmpty);

        //protected data

        //private data
        private: Node* root;

        //others
    };
} // namespace npInterpreter


#endif //INTERPRETER_H__
